// 引入Vue和vue-router插件

import Vue from 'vue';
import VueRouter from 'vue-router';
import routes from './routes'

// 使用插件
Vue.use(VueRouter);

// 引入store
import store from '@/store'

// 先把 VueRouter 原型对象上的 push 保存一份
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

// 重写push|replace
// 第一个参数：告诉原来的push方法往哪里跳转（传递哪些参数）
// 第二个参数：成功的回调
// 第三个参数：失败的回调
VueRouter.prototype.push = function(location, resolve, reject) {
    if (resolve && reject) {
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => {}, () => {})
    }
}
VueRouter.prototype.replace = function(location, resolve, reject) {
    if (resolve && reject) {
        originReplace.call(this, location, resolve, reject)
    } else {
        originReplace.call(this, location, () => {}, () => {})
    }
}

// 配置路由

let router = new VueRouter({
    // 配置路由
    routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {
        return { y: 0 }
    }
})

// 全局前置守卫
router.beforeEach(async(to, from, next) => {
    // to 到哪去
    // from 从哪来
    // next 放行函数 next(path)放行到指定路由
    next()
        // 获取token
    let token = store.state.user.token
    let name = store.state.user.userInfo.name
        // 用户已经登录，如果还要去登录页就停留在首页
    if (token) {
        if (to.path == '/login') {
            next('/home');
            console.log(111);
        } else {
            // 用户已经登录，要访问其他页面
            // 用户信息已有
            if (name) {
                next();
                console.log(222);
            } else {
                // 没有用户信息，派发action让仓库存储用户信息再跳转
                try {
                    // 获取用户信息成功，放行
                    await store.dispatch('getUserInfo');
                    next();
                    console.log(333);
                } catch (error) {
                    // token失效了，重新登录
                    // 清除token
                    await store.dispatch('userLogout');
                    next('/login');
                }
            }
        }
    } else {
        // 未登录,不能去交易，支付，用户相关页面，全部跳转登陆页面，其他放行
        let toPath = to.path
        if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1) {
            // redirect重定向（去想去的地方）
            next('/login?redirect=' + toPath)
        } else {
            next()
        }
        console.log(444);
    }
})

export default router